package com.metier;
import java.util.List;
import java.util.ArrayList;

/**
 * Classe metier Parc
 * 
 * Permet l'instanciation d'un objet de type Parc
 * 
 * @author b0dian
 * @version 1.0
 */
public class Parc {
	private List<Station> LeParcBorne;

	/**
	 * Constructeur public, cree l'instance de Parc qui sera sollicitee pour
	 * toutes les methodes de la classe
	 * 
	 */
	public Parc() {
		LeParcBorne = new ArrayList<Station>();
	}

	/**
	 * Modificateur sur la propriete LeParcBorne qui permet d'ajouter une
	 * station s passe en paramètre a ce parc
	 * 
	 * @param s
	 *            de type Station
	 */
	public void AjouterStation(Station s) {
		LeParcBorne.add(s);
	}

	/**
	 * Accesseur sur la propriete LeParcBorne qui permet de retourner le nombre
	 * de stations contenues dans ce parc
	 * 
	 * @return nbStations de type int
	 */
	public int GetNbStation() {
		int nbStations = LeParcBorne.size();
		return nbStations;
	}

	/**
	 * Accesseur sur la propriete LeParcBorne qui permet de retourner toutes les
	 * stations contenues dans ce parc
	 * 
	 * @return LeParcBorne de type collection de stations
	 */
	public List<Station> leParcBorne() {
		return LeParcBorne;
	}

	/**
	 * Accesseur sur la propriete LeParcBorne qui permet de retourner le nombre
	 * de Bornes total contenues dans chaque station de ce parc
	 * 
	 * @return nbBornes de type int
	 */
	public int GetNbBorne() {
		int nbBornes = 0;
		for (Station s : LeParcBorne) {
			nbBornes = nbBornes + s.getLesBornes().size();
		}
		return nbBornes;
	}

	/**
	 * Accesseur sur la propriete LeParcBorne qui ramene la liste de bornes de
	 * la station dont l'id est passe en parametre, ramene null si la station
	 * n'existe pas
	 * 
	 * @return Bornes de type collection de Bornes
	 */
	public List<Borne> GetLaStation(int id) {
		List<Borne> Bornes = new ArrayList<Borne>();
		Boolean trouve = false;
		int i = 0;
		while (trouve == false && i < LeParcBorne.size()) {
			if (LeParcBorne.get(i).getIdStation() == id) {
				trouve = true;
				Bornes = LeParcBorne.get(i).getLesBornes();
			} else {
				i++;
			}
		}
		return Bornes;
	}

	/**
	 * Modificateur sur la propriete LeParcBorne qui ajoute la liste de bornes
	 * passe en parramètre a la station
	 * 
	 * @param leParcBorne
	 *            de type collection de Stations
	 */
	public void setLeParcBorne(List<Station> leParcBorne) {

		this.LeParcBorne = leParcBorne;

	}

	/**
	 * Accesseur sur la propriete LeParcBorne qui retourne la liste de Stations
	 * correspondantes à l'id TypeCharge passe en parramètre
	 * 
	 * @param idTypeCharge
	 *            de type int
	 * @return listeS de type collection de Stations
	 */
	public List<Station> getStationTypeCharge(int idTypeCharge)

	{

		// declaration et instanciation d'une collection de travail

		List<Station> listeS = new ArrayList<Station>();

		// booleen et index pour la recherche dans liste de bornes de la station

		Boolean trouve;

		int i;

		Borne b;

		// parcours de l'ensemble des stations

		for (Station s : LeParcBorne)

		{

			// on repart au debut pour chaque station

			trouve = false;

			i = 0;

			// recherche dans la collection de bornes de la station en cours de
			// traitement

			// tant que l'on a pas trouve et que l'on a une chance
			// de=trouver(limite taille de la collection)

			while ((trouve == false) && (i < s.getLesBornes().size()))

			{

				// extraction borne dan svariable de travail pas obligatoire
				// mais plus simple

				b = s.getLesBornes().get(i);

				// test du codetypepecharge
				if (b.getType().getCodeTypeCharge() == idTypeCharge) {

					// trouve donc ajout e la collection de travail
					listeS.add(s);

					trouve = true;
				} else {

					// on avance
					i++;
				}
			}

		}

		// on delivre la collection

		return listeS;

	}
}
